Обработка, описанная в данной главе, является лишь примером одной из возможных реализаций протокола. Иные реализации могут иметь несколько иные процедуры обработки, однако они должны отличаться от описанных в данной главе лишь в деталях, но никак не по существу.
Деятельность программы протокола TCP можно рассматривать как реагирование на события. Эти происходящие события можно разбивать на три категории: запросы клиентов, прибытие сегментов, истечение контрольного времени. Данная глава описывает деятельность в протоколе TCP в ответ на каждое их этих событий. Во многих случаях необходимая обработка зависит от состояния соединения. События, которые могут произойти:
Команды клиента - на открытие соединения - на посылку данных - на получение данных - на закрытие соединения - на ликвидацию соединения - на определение статуса соединения Получения сегментов Истечение контрольного времени - для действий клиента - для повторной посылки - в состоянии ожидания
Модель интерфейса TCP и клиента состоит в том, что команды клиента выполняются немедленно, а вероятный отложенный отчет предоставляется через механизм событий или псевдопрерываний. В дальнейшем описании понятие "сигнал" может обозначать некое основание для посылки отложенного отчета.
Сообщение об ошибках пердоставляется в виде текстовых строк. Например, команды клиента, адресованные к несуществующим соединениям, получат сообщение "error: connection not open".
Пожалуйста учтите, что в дальнейшем вся арифметика для номеров очереди, номеров подтверждения, окон и т.д. осуществляется по модулю 2**32, что соответствует размеру множества номеров очередей. Заметим также, что "=<" означает "меньше или равно" (по модулю 2**32).
Чтобы постичь смысл обработки приходящих сегментов, естественным было бы представить, что они сперва проверяются на корректность номера очереди (т.е. что их информация попадает в диапазон "окна получения" среди ожидаемых номеров очереди) и что они, в общем случае, будут ставиться в очередь и подвергаться обработке соответственно своим номерам.
Если одни сегменты перекрываются с другими, ранее полученными сегментами, то мы конструируем сегмент, содержащий лишь действительно новые данные, а затем соответствующим образом корректируем поля заголовка.
Заметим, что состояние программы протокола TCP остается при обработке событий без изменений, если обратное не указано особо.